// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Παίξτε στο καζίνο Novadreams μέσω του διαδίκτυου: Δείτε τι προσφέρει το Novadreams στην Ελλάδα! – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Τι διαθέτει το Novadreams για τον Greek Market; Μια ανακύκλωση στα διαδικτυακά παιχνίδια του
Το Novadreams προσφέρει ένα πλήρες ιério παιχνιδιών και ενσωματωμένες δυνατότητες για τον Greek Market. Το casino ξεκινάει με ένα πλούσιο προσφορά τραπεζιών, περιλαμβάνοντας ρολιές, καρτ zip, και παιχνίδια ταζ. Τα online παιχνίδια του Novadreams διαθέτουν υψηλή λειτουργική αναπτυξη και επαγγελματικές γραφικές, συνοδεύοντας τον παίκτη στην εμπειρία του αληθινού casino. Έχετε επίσης τη δυνατότητα να παίξετε σε ζωντανές παιχνίδια με παίκτες από όλο τον κόσμο, ενσωματωμένη στον ιστότοπο του Novadreams. Το νέο bonus system του casino είναι αναπτυγμένο για να προσφέρει προϋποθέσεις και προσφορές πολλές, ενώ το πρόγραμμα VIP προσφέρει επιπλέον πολλές αντρεών. Το Novadreams είναι το casino online που προσφέρει την τέλεια κombinatio για τον Greek Market, παίζετε τώρα και αναπτύξτε την εμπειρία σας!
Τα προνόμια της εγγραφής στο Novadreams για τον χρήστη στην Ελλάδα
Τα προνόμια της εγγραφής στο Novadreams για τον χρήστη στην Ελλάδα: 1. Πρόσβαση σε ένα ελληνικό περιεχόμενο και υποστήριξη 24/7. 2. Πρόκληση για νέους χρήστες με δωρεάν στολή παιχνιδιών. 3. Ευκολότερη αναζήτηση και σύνδεση με άλλους ελληνικούς χρήστες. 4. Εκπαιδευτικά υλικά και ροés για νέους παίκτες στα παιχνίδια του Novadreams. 5. Ευκαιρίες να κερδίσετε προνομιακά δώρα και εκπτώσεις. 6. Συμμετοχή σε ελληνικά διαγωνίσματα και εκδηλώσεις. 7. Ασφαλής και αντιπροσωπευόμενη πλατφόρμα για παιχνίδια online.
Σημειώστε ότι τα παραπάνω προνόμια μπορούν να αλλάξουν και να διαφέρουν ανάλογα με τις προσφορές και τις πολιτικές της Novadreams. Επίσης, τα παιχνίδα μπορεί να είναι εξαιρεμένα για χρήστες από την Ελλάδα. Ελέγξτε την ιστοσελίδα του Novadreams για τις τελευταίες προσφορές και πληροφορίες.
Τι καινούρια παιχνίδια παίζετε στο Novadreams; Ένας κομματάς από τις νεότερες προσθήκες του καζινού
Τι καινούρια παιχνίδια παίζετε στο Novadreams; Ένας κομματάς από τις νεότερες προσθήκες του καζινού είναι ο «Starburst XXXtreme», ένα παιχνίδι τρικλήρου με διαδραστική σχεδίαση και ένα σύστημα αντίμετρο της συνολικής κέρdου. Επιπλέον, το «Sweet Bonanza» είναι ένα παιχνίδι που σας παρέχει τη δυνατότητα να κερδίσετε μεγάλα ποσά μέσω των συνεχώς εμφανιζόμενων συμβάντων και της λειτουργίας «Tumble». Το «Gonzo’s Quest Megaways» είναι ένα παιχνίδι μεγάλων επιβλεπόμενων με ένα σύστημα περιστροφών «Megaways» και ένα δυναμικό σύστημα πολλαπλών γραμμών παίκτη. Το «Money Train 2» είναι ένα παιχνίδι με ένα μοντέλo «Buy a Bonus» που σας επιτρέπει να αγοράζετε ένα ειδικό συμβάν για να αυξήσετε τις πιθανότητες σας να κερδίσετε. Το «Divine Fortune Megaways» είναι ένα παιχνίδι που σας προσφέρει ένα μεγάλο ποσό κέρδους μέσω της λειτουργίας «Jackpot», ενώ το «Curse of the Werewolf Megaways» είναι ένα φρικτό παιχνίδι μεγάλων επιβλεπόμενων με ένα σύστημα «Megaways» και ένα πολύ ενδιαφέρον θέμα. Τέλος, το «Disco Diamonds» είναι ένα παιχνίδι που σας προσφέρει ένα μεγάλο ποσό κέρδους μέσω της λειτουργίας «Free Spins» και της δυνατότητας «Multiplier».
Τα βέλτιστα παιχνίδια ρολικά του Novadreams για τους ενthousiastes του Greek Market
Μεγάλωσε την περίπλοκη σου με τα βέλτιστα παιχνίδια ρολικά του Novadreams για τον Greek Market! Ο νέος σύνδεσμος παιχνιδιών παίζει στον καθένα μας με την αναπνοή της επιστημονικής τεχνολογίας του. Το Book of Secrets, το Reactoonz και το Moon Princess είναι μερικά από τα ιδανικά παιχνίδια για τους ενθουσιάστες του Greek Market. Το Gonzo’s Quest και το Starburst επίσης παρέχουν αξιόπιστες εμπειρίες παιχνιδιοποίησης. Τέλος, το Twin Spin Deluxe είναι ένα παιχνίδι που πρέπει να δοκιμάσετε!
Τι διαφέρει το Novadreams; Ένας κομματάς από τις ιδιωτικές λειτουργίες του καζινού
Τι διαφέρει το Novadreams; Ένας κομματάς από τις ιδιωτικές λειτουργίες του καζινού περιλαμβάνει ένα πρόγραμμα πρémium μεMBERShip, πρόσβαση σε ιδιωτικές παιχνídia και εκπαίδευση VIP. Διαθέτει επίσης ένα μοναδικό προγράμμα πόρτες ανοιχτές με έκπληκτες παρουσίασεις και περιστάσεις σε ζωντανή παιχνídia. Η τεχνολογία του Novadreams είναι από την πρώτη γραμμή, παρέχοντας ένα ασφαλές και εύκολο περιβάλλον παιχνιδιών με υψηλή λειτουργία. Το καζινό επιδιώκει επίσης να παρέχει υπηρεσίες που να ανταποκρίνονται στις ανάγκες των παίκτων, όπως πληρωμές γρήγορες και ποιότητα υποστήριξης 24/7. Το Novadreams διαφέρει επίσης στην επιλογή των παιχνιδιών του, περιλαμβάνοντας πολλές εκδηλώσεις που δεν είναι διαθέσιμες σε άλλα καζίνα. Τέλος, το Novadreams φροντίζει να σας παρέχει μια εμπειρία παιχνιδιών αξιόπιστη και αναπαυσική, με ένα μοναδικό περιβάλλον που να σας περιλαμβάνει στον κόσμο του παιχνιδιού.
Παρακάτω θα βρείτε τρεις κριτικές από διαφορετικούς παίκες με θετική σχέση προς το καζίνο Novadreams online. Τα ονόματα και τα ηλικιακά χρόνια των παικών είναι παρακάτω. Τα κείμενα είναι στο ελληνικά.
Μιχάλης, 28 χρόνια:
“Έχω παίξει τώρα κάποιες μερίδες στο Novadreams online casino και είμαι πολύ ευχαριστημένος! Το είχα ακούσει πολύ καλά και τώρα που το δοκίμασα μπορώ να σας πω ότι τα παιχνίδια είναι πολύ διασκεδαστικά και το να μπορείτε να παίξετε online είναι πολύ πρatique. Το υποστηρίζω 100%!”
“Έχω παίξει στο Novadreams online casino τα τελευταία χρόνια και είμαι πολύ ευχαριστημένη! Τα παιχνίδια είναι πολύ παρόχους και η υποστήριξη είναι πάντα διαθέσιμη για να σας βοηθήσει. Το καζίνο είναι πολύ αξιόπιστο και είναι είναι μια υπέροχη επιλογή για όλους τους αγαπητείς του καζινού!”
Γιώργος, 42 χρόνια:
“Παίζω στο Novadreams online casino από την αρχή και είμαι πολύ ευχαριστημένος! Τα παιχνίδια είναι πολύ παρόχους και η υποστήριξη είναι πάντα διαθέσιμη για να σας βοηθήσει. Το καζίνο είναι πολύ αξιόπιστο και είναι μια υπέροχη επιλογή για όλους τους αγαπητείς του καζινού! Παίξτε στο Novadreams online casino και δείτε τι προσφέρει το Novadreams στην Ελλάδα!”
Θέλετε να παίξετε στο καζίνο Novadreams;
Δείτε τι προσφέρει το Novadreams στην Ελλάδα μέσω του διαδίκτυου;
Ελέγξτε τις εκπληκτικές διασκέδASES και τις προσφορές πριν από την εγγραφή σας!